using Baci.Net.ToolKit.ArcGISProGeoprocessor.Models;
using Baci.Net.ToolKit.ArcGISProGeoprocessor.Models.Attributes;
using Baci.Net.ToolKit.ArcGISProGeoprocessor.Models.Attributes.DomainAttributes;
using Baci.Net.ToolKit.ArcGISProGeoprocessor.Models.Enums;
using System.Collections.Generic;
using System.ComponentModel;

namespace Baci.ArcGIS._3DAnalystTools._3DIntersections
{
    /// <summary>
    /// <para>Intersect 3D Line With Multipatch</para>
    /// <para>Returns the number of geometric intersections between  3D line and multipatch features and also provides optional features that represent points of intersection and also divide the 3D lines at such points.</para>
    /// <para>返回 3D 线要素和多面体要素之间的几何交点数，并提供表示交点的可选要素，并在这些点处划分 3D 线。</para>
    /// </summary>    
    [DisplayName("Intersect 3D Line With Multipatch")]
    public class Intersect3DLineWithMultiPatch : AbstractGPProcess
    {
        /// <summary>
        /// 无参构造
        /// </summary>
        public Intersect3DLineWithMultiPatch()
        {

        }

        /// <summary>
        /// 有参构造
        /// </summary>
        /// <param name="_in_line_features">
        /// <para>Input Line Features</para>
        /// <para>The line features that will be intersected with the multipatch features.</para>
        /// <para>将与多面体要素相交的线要素。</para>
        /// </param>
        /// <param name="_in_multipatch_features">
        /// <para>Input Multipatch Features</para>
        /// <para>The multipatch features that the lines will be intersected against.</para>
        /// <para>线将相交的多面体要素。</para>
        /// </param>
        public Intersect3DLineWithMultiPatch(object _in_line_features, object _in_multipatch_features)
        {
            this._in_line_features = _in_line_features;
            this._in_multipatch_features = _in_multipatch_features;
        }
        public override string ToolboxName => "3D Analyst Tools";

        public override string ToolName => "Intersect 3D Line With Multipatch";

        public override string CallName => "3d.Intersect3DLineWithMultiPatch";

        public override List<string> AcceptEnvironments => ["XYDomain", "XYResolution", "XYTolerance", "ZDomain", "ZResolution", "ZTolerance", "autoCommit", "configKeyword", "extent", "geographicTransformations", "outputCoordinateSystem", "workspace"];

        public override object[] ParameterInfo => [_in_line_features, _in_multipatch_features, _join_attributes.GetGPValue(), _out_point_feature_class, _out_line_feature_class, _out_intersection_count];

        /// <summary>
        /// <para>Input Line Features</para>
        /// <para>The line features that will be intersected with the multipatch features.</para>
        /// <para>将与多面体要素相交的线要素。</para>
        /// <para></para>
        /// </summary>
        [DisplayName("Input Line Features")]
        [Description("")]
        [Option(OptionTypeEnum.Must)]
        public object _in_line_features { get; set; }


        /// <summary>
        /// <para>Input Multipatch Features</para>
        /// <para>The multipatch features that the lines will be intersected against.</para>
        /// <para>线将相交的多面体要素。</para>
        /// <para></para>
        /// </summary>
        [DisplayName("Input Multipatch Features")]
        [Description("")]
        [Option(OptionTypeEnum.Must)]
        public object _in_multipatch_features { get; set; }


        /// <summary>
        /// <para>Join Attributes</para>
        /// <para><xdoc>
        ///   <para>The input line feature attributes that will be stored with the optional output features.</para>
        ///   <bulletList>
        ///     <bullet_item>Only Feature ID Numbers— Only feature identification numbers will be stored. This is the default.</bullet_item><para/>
        ///     <bullet_item>All Attributes—All attributes will be stored.</bullet_item><para/>
        ///   </bulletList>
        /// </xdoc></para>
        /// <para><xdoc>
        ///   <para>将与可选输出要素一起存储的输入线要素属性。</para>
        ///   <bulletList>
        ///     <bullet_item>仅功能标识号 - 仅存储功能标识号。这是默认设置。</bullet_item><para/>
        ///     <bullet_item>所有属性 - 将存储所有属性。</bullet_item><para/>
        ///   </bulletList>
        /// </xdoc></para>
        /// <para></para>
        /// </summary>
        [DisplayName("Join Attributes")]
        [Description("")]
        [Option(OptionTypeEnum.optional)]
        public _join_attributes_value _join_attributes { get; set; } = _join_attributes_value._IDS_ONLY;

        public enum _join_attributes_value
        {
            /// <summary>
            /// <para>Only Feature ID Numbers</para>
            /// <para>Only Feature ID Numbers— Only feature identification numbers will be stored. This is the default.</para>
            /// <para>仅功能标识号 - 仅存储功能标识号。这是默认设置。</para>
            /// </summary>
            [Description("Only Feature ID Numbers")]
            [GPEnumValue("IDS_ONLY")]
            _IDS_ONLY,

            /// <summary>
            /// <para>All Attributes</para>
            /// <para>All Attributes—All attributes will be stored.</para>
            /// <para>所有属性 - 将存储所有属性。</para>
            /// </summary>
            [Description("All Attributes")]
            [GPEnumValue("ALL")]
            _ALL,

        }

        /// <summary>
        /// <para>Output Points</para>
        /// <para>Optional features that represent points of intersection between the 3D line and multipatch.</para>
        /// <para>表示 3D 线和多面体之间交点的可选要素。</para>
        /// <para></para>
        /// </summary>
        [DisplayName("Output Points")]
        [Description("")]
        [Option(OptionTypeEnum.optional)]
        public object _out_point_feature_class { get; set; } = null;


        /// <summary>
        /// <para>Output Lines</para>
        /// <para>Optional line features that divide the input lines at each point of intersection with a multipatch feature.</para>
        /// <para>可选线要素，用于使用多面体要素划分每个交点处的输入线。</para>
        /// <para></para>
        /// </summary>
        [DisplayName("Output Lines")]
        [Description("")]
        [Option(OptionTypeEnum.optional)]
        public object _out_line_feature_class { get; set; } = null;


        /// <summary>
        /// <para>Intersection Count</para>
        /// <para></para>
        /// <para></para>
        /// <para></para>
        /// </summary>
        [DisplayName("Intersection Count")]
        [Description("")]
        [Option(OptionTypeEnum.derived)]
        public long _out_intersection_count { get; set; }


        public Intersect3DLineWithMultiPatch SetEnv(object XYDomain = null, object XYResolution = null, object XYTolerance = null, object ZDomain = null, object ZResolution = null, object ZTolerance = null, int? autoCommit = null, object configKeyword = null, object extent = null, object geographicTransformations = null, object outputCoordinateSystem = null, object workspace = null)
        {
            base.SetEnv(XYDomain: XYDomain, XYResolution: XYResolution, XYTolerance: XYTolerance, ZDomain: ZDomain, ZResolution: ZResolution, ZTolerance: ZTolerance, autoCommit: autoCommit, configKeyword: configKeyword, extent: extent, geographicTransformations: geographicTransformations, outputCoordinateSystem: outputCoordinateSystem, workspace: workspace);
            return this;
        }

    }

}